home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / tests / pdevtest / RCS / client.c,v < prev    next >
Encoding:
Text File  |  1989-01-31  |  5.8 KB  |  275 lines

  1. head     1.1;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    brent:1.1; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.1
  10. date     88.04.17.10.20.46;  author brent;  state Exp;
  11. branches ;
  12. next     ;
  13.  
  14.  
  15. desc
  16. @Client side code for pseudo-device benchmark
  17. @
  18.  
  19.  
  20.  
  21. 1.1
  22. log
  23. @Initial revision
  24. @
  25. text
  26. @/* 
  27.  * client.c --
  28.  *
  29.  *    The client part of some multi-program synchronization primatives.
  30.  *    The routines here interface to the server; initial contact,
  31.  *    waiting for the start message, and notification of completion.
  32.  *
  33.  * Copyright 1986 Regents of the University of California
  34.  * All rights reserved.
  35.  */
  36.  
  37. #ifndef lint
  38. static char rcsid[] = "$Header: client.c,v 1.1 88/04/16 12:27:43 brent Exp $ SPRITE (Berkeley)";
  39. #endif not lint
  40.  
  41.  
  42. #include "sprite.h"
  43. #include "status.h"
  44. #include "io.h"
  45. #include "fs.h"
  46. #include "dev/pdev.h"
  47.  
  48. extern char *pdev;
  49. extern Boolean select;
  50.  
  51. char buffer[4096];
  52. int bufSize = sizeof(buffer);
  53.  
  54. typedef struct ClientState {
  55.     int clientStreamID;
  56. } ClientState;
  57.  
  58. /*
  59.  *----------------------------------------------------------------------
  60.  *
  61.  * ClientSetup --
  62.  *
  63.  *    Establish contact with the server.
  64.  *
  65.  * Results:
  66.  *    A pointer to state about the clients needed by ClientStart and
  67.  *    ClientDone.
  68.  *
  69.  * Side effects:
  70.  *    Creates named pipes and communicates with server
  71.  *    This exits upon error.
  72.  *
  73.  *----------------------------------------------------------------------
  74.  */
  75.  
  76. void
  77. ClientSetup(dataPtr)
  78.     ClientData *dataPtr;
  79. {
  80.     ClientState *statePtr;
  81.     ReturnStatus status;
  82.  
  83.     statePtr = (ClientState *)Mem_Alloc(sizeof(ClientState));
  84.  
  85.     status = Fs_Open(pdev, FS_READ|FS_WRITE, 0,
  86.                  &statePtr->clientStreamID);
  87.     if (status != SUCCESS) {
  88.     Stat_PrintMsg(status, "ClientSetup: error opening pseudo device");
  89.     Io_Flush(io_StdErr);
  90.     Proc_Exit(status);
  91.     }
  92.     *dataPtr = (ClientData)statePtr;
  93. }
  94.  
  95. /*
  96.  *----------------------------------------------------------------------
  97.  *
  98.  * ClientRead --
  99.  *
  100.  *    Read from a pseudo-device.  The amount and number of repetitions
  101.  *    can be varied for measurment.
  102.  *
  103.  * Results:
  104.  *    None
  105.  *
  106.  * Side effects:
  107.  *    None.
  108.  *
  109.  *----------------------------------------------------------------------
  110.  */
  111.  
  112. void
  113. ClientRead(data, size, reps)
  114.     ClientData data;
  115.     int size;
  116.     register int reps;
  117. {
  118.     ClientState *statePtr;
  119.     int amountRead;
  120.     register ReturnStatus status;
  121.     register char *buffer = (char *)Mem_Alloc(size);
  122.     register int i;
  123.  
  124.     statePtr = (ClientState *)data;
  125.     for (i=0 ; i<reps ; i++) {
  126.     amountRead = size;
  127.     if (select) {
  128.         int numReady;
  129.         int mask = 1 << statePtr->clientStreamID;
  130.         status = Fs_Select(32, NULL, &mask, NULL, NULL, &numReady);
  131.         if (status != SUCCESS) {
  132.         Stat_PrintMsg(status, "ClientRead: error on select");
  133.         break;
  134.         }
  135.     }
  136.     status = Fs_Read(statePtr->clientStreamID, size, buffer, &amountRead);
  137.     if (status != SUCCESS) {
  138.         Stat_PrintMsg(status, "ClientRead: error on read");
  139.         break;
  140.     } else if (amountRead != size) {
  141.         Io_PrintStream(io_StdErr, "Read #%d was short (%d < %d)\n",
  142.             i, amountRead, size);
  143.         break;
  144.     }
  145.     if (size > 0 && buffer[0] != 'z') {
  146.         Io_PrintStream(io_StdErr, "Bad data returned <%c>\n", buffer[0]);
  147.     }
  148.     }
  149.     Mem_Free(buffer);
  150. }
  151.  
  152. /*
  153.  *----------------------------------------------------------------------
  154.  *
  155.  * ClientWrite --
  156.  *
  157.  *    Write from a pseudo-device.  The amount and number of repetitions
  158.  *    can be varied for measurment.
  159.  *
  160.  * Results:
  161.  *    None
  162.  *
  163.  * Side effects:
  164.  *    None.
  165.  *
  166.  *----------------------------------------------------------------------
  167.  */
  168.  
  169. void
  170. ClientWrite(data, size, reps)
  171.     ClientData data;
  172.     int size;
  173.     register int reps;
  174. {
  175.     ClientState *statePtr;
  176.     int amountWrite;
  177.     register ReturnStatus status;
  178.     register char *buffer = (char *)Mem_Alloc(size);
  179.  
  180.     statePtr = (ClientState *)data;
  181.     do {
  182.     status = Fs_Write(statePtr->clientStreamID, size, buffer, &amountWrite);
  183.     if (status != SUCCESS) {
  184.         Stat_PrintMsg(status, "ClientWrite: error on read");
  185.         break;
  186.     } if (amountWrite != size) {
  187.         Io_PrintStream(io_StdErr, "Short write %d < %d\n", amountWrite,
  188.                     size);
  189.     }
  190.     } while (--reps > 0);
  191.     Mem_Free(buffer);
  192. }
  193.  
  194. /*
  195.  *----------------------------------------------------------------------
  196.  *
  197.  * ClientIOControl --
  198.  *
  199.  *    Do an IOControl to a pseudo-device.
  200.  *    The amount of data passed in and number of repetitions
  201.  *    can be varied for measurment.
  202.  *
  203.  * Results:
  204.  *    None
  205.  *
  206.  * Side effects:
  207.  *    None.
  208.  *
  209.  *----------------------------------------------------------------------
  210.  */
  211.  
  212. void
  213. ClientIOControl(data, size, reps)
  214.     ClientData data;
  215.     int size;
  216.     register int reps;
  217. {
  218.     ClientState *statePtr;
  219.     int amountRead;
  220.     register ReturnStatus status;
  221.     register char *inBuffer = (char *)Mem_Alloc(size);
  222.     register char *outBuffer = (char *)Mem_Alloc(size);
  223.     int command;
  224.  
  225.     statePtr = (ClientState *)data;
  226.     do {
  227.     extern Boolean switchBuf;
  228.     if (switchBuf && (reps % 7) == 0) {
  229.         command = IOC_PDEV_SET_BUF;
  230.     } else {
  231.         command = 8 << 16;    /* To avoid range of generic I/O controls */
  232.     }
  233.     status = Fs_IOControl(statePtr->clientStreamID, command, size, inBuffer,
  234.                 size, outBuffer);
  235.     if (status != SUCCESS) {
  236.         Stat_PrintMsg(status, "ClientIOControl: error ");
  237.         break;
  238.     }    
  239.     } while (--reps > 0);
  240.     Mem_Free(inBuffer);
  241.     Mem_Free(outBuffer);
  242. }
  243.  
  244. /*
  245.  *----------------------------------------------------------------------
  246.  *
  247.  * ClientDone --
  248.  *
  249.  *    Tell the server we're done.  This is just done by closing
  250.  *    the pseudo stream.
  251.  *
  252.  * Results:
  253.  *    None
  254.  *
  255.  * Side effects:
  256.  *    None
  257.  *
  258.  *----------------------------------------------------------------------
  259.  */
  260.  
  261. void
  262. ClientDone(data)
  263.     ClientData data;
  264. {
  265.     ClientState *statePtr;
  266.     register ReturnStatus status;
  267.  
  268.     statePtr = (ClientState *)data;
  269.     status = Fs_Close(statePtr->clientStreamID);
  270.     if (status != SUCCESS) {
  271.     Stat_PrintMsg(status, "ClientDone: error on close");
  272.     }
  273. }
  274. @
  275.